home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / strategy / xpat2-1.000 / xpat2-1 / xpat2-1.04 / src / Xaw-help.c < prev    next >
C/C++ Source or Header  |  1995-01-29  |  3KB  |  96 lines

  1. /*****************************************************************************/
  2. /*                                         */
  3. /*                                         */
  4. /*    X patience version 2 -- module Xaw-help.c                 */
  5. /*                                         */
  6. /*    Online help systems for the Athena Widget interface             */
  7. /*    written by Michael Bischoff (mbi@mo.math.nat.tu-bs.de)             */
  8. /*    March-1994                                 */
  9. /*    see COPYRIGHT.xpat2 for Copyright details                 */
  10. /*                                         */
  11. /*                                         */
  12. /*****************************************************************************/
  13. #ifdef ONLINE_HELP
  14. #ifdef useXaw
  15. #include "X-pat.h"
  16. #include "Tableau.h"
  17.  
  18. #include <X11/Shell.h>
  19. #include <X11/Xaw/MenuButton.h>
  20. #include <X11/Xaw/SimpleMenu.h>
  21. #include <X11/Xaw/Command.h>
  22. #include <X11/Xaw/AsciiText.h>
  23. #include <X11/Xaw/Form.h>
  24. #include <X11/Xaw/Sme.h>
  25. #include <X11/Xaw/SmeBSB.h>
  26.  
  27. void create_help(void);
  28. void popup_help(void);
  29. void popdown_help(Widget, XtPointer, XtPointer);
  30.  
  31. static int help_active = 0;
  32. static Widget help, helppaned, helppanel, helptext, helpclose;
  33.  
  34. extern struct rules *rulepool[];
  35. static void selecttopic(Widget w, XtPointer number, XtPointer garbage) {
  36.     char filename[200];
  37.     const char *s = XtName(w);
  38.     Arg Args[2];
  39.     int i = atoi(s+4);
  40.  
  41.     if (TXT_HELPFILES[i][0] != '/')
  42.     sprintf(filename, "%s/%s/%s", LIBDIR, langdir, TXT_HELPFILES[i]);
  43.     else
  44.     strcpy(filename, TXT_HELPFILES[i]);
  45.  
  46.     XtSetArg(Args[0], XtNstring, filename);
  47.     XtSetArg(Args[1], XtNtype, XawAsciiFile);
  48.     XtSetValues(helptext, Args, 2);
  49. }
  50.  
  51. void create_help(void) {
  52.     Widget topicsmenu, topicsbutton, w;
  53.     Arg Args[1];
  54.     help         = XtCreatePopupShell("help", transientShellWidgetClass, toplevel, NULL, 0);
  55.     helppaned    = XtCreateManagedWidget("helppaned",    panedWidgetClass,      help,         NULL, ZERO);
  56.     helppanel      = XtCreateManagedWidget("helppanel",    boxWidgetClass,        helppaned,    NULL, ZERO);
  57.     helptext     = XtCreateManagedWidget("helptext",    asciiTextWidgetClass,  helppaned,    NULL, ZERO);
  58.     XtSetArg(Args[0], XtNmenuName, "topicsmenu");
  59.     topicsbutton = XtCreateManagedWidget("Topic",       menuButtonWidgetClass, helppanel,    Args, 1);
  60.     topicsmenu   = XtCreatePopupShell("topicsmenu",     simpleMenuWidgetClass, topicsbutton, NULL, ZERO);
  61.     helpclose     = XtCreateManagedWidget("Close Help",    commandWidgetClass,    helppanel,    NULL, ZERO);
  62.     XtAddCallback(helpclose, XtNcallback, popdown_help, NULL);
  63.  
  64.     XtSetArg(Args[0], XtNlabel, TXT_HELP_KEYS);
  65.     w = XtCreateManagedWidget("Help0", smeBSBObjectClass, topicsmenu, Args, 1);
  66.     XtAddCallback(w, XtNcallback, selecttopic, NULL);
  67.     {   struct rules **rp;
  68.     for (rp = rulepool; *rp; ++rp) {
  69.         char n[8], s[40];
  70.         sprintf(n, "Help%d", rp-rulepool+5);
  71.         XtSetArg(Args[0], XtNlabel, s);
  72.         sprintf(s, TXT_HELP_RULES, (*rp)->shortname);
  73.         w = XtCreateManagedWidget(n, smeBSBObjectClass, topicsmenu, Args, 1);
  74.         XtAddCallback(w, XtNcallback, selecttopic, NULL);
  75.     }
  76.     }
  77.  
  78. }
  79.  
  80. void popup_help(void) {
  81.     if (help_active)
  82.     return;        /* request pending => deny another one */
  83.     help_active = 1;
  84.     XtPopup(help, XtGrabNone);
  85. }
  86.  
  87. void popdown_help(Widget w, XtPointer a, XtPointer b) {
  88.     if (!help_active)
  89.     return;        /* request pending => deny another one */
  90.     help_active = 0;
  91.     XtPopdown(help);
  92. }
  93.  
  94. #endif
  95. #endif
  96.